const path = require("path");
const fs = require("fs");

const {
  fileUploadError,
  unSupportedFileType,
} = require("../constant/err.type");

class GoodsController {
  /**
   * 图片上传
   * @param {*} ctx
   * @returns
   */
  // async upload(ctx) {
  //   const { file } = ctx.request.files;
  //   console.log(file);
  //   const fileTypes = ["image/ipeg", "image/png"];
  //   if (file) {
  //     if (!fileTypes.includes(file.type)) {
  //       return ctx.app.emit("error", unSupportedFileType, ctx);
  //     }
  //     ctx.success(0, "商品图片上传成功", {
  //       goods_img: path.basename(file.path),
  //     });
  //   } else {
  //     return ctx.app.emit("error", fileUploadError, ctx);
  //   }
  // }
  async upload(ctx) {
    try {
      const fileTypes = ["image/ipeg", "image/png"];
      const { file } = ctx.request.files;
      if (file) {
        if (!fileTypes.includes(file.mimetype)) {
          return ctx.app.emit("error", unSupportedFileType, ctx);
        }
        // 读取文件流
        const fileReader = fs.createReadStream(file.filepath);
        // 设置文件保存路径
        const filePth = path.join(__dirname, "../upload");
        const fileResource = filePth + `/${file.newFilename}`;
        // 文件写入流
        const writeStream = fs.createWriteStream(fileResource);
        if (!fs.existsSync(filePth)) {
          fs.mkdir(filePath, (err) => {
            if (err) {
              throw new Error(err);
            } else {
              fileReader.pipe(writeStream);
              ctx.success(0, "商品图片上传成功", {
                // 使用koa-static后，访问资源时不需要加upload
                goods_img: `http://localhost:8000/${file.newFilename}`,
              });
            }
          });
        } else {
          fileReader.pipe(writeStream);
          ctx.success(0, "商品图片上传成功", {
            // 使用koa-static后，访问资源时不需要加upload
            goods_img: `http://localhost:8000/${file.newFilename}`,
          });
        }
      } else {
        return ctx.app.emit("error", fileUploadError, ctx);
      }
    } catch (error) {
      console.log(error);
      ctx.app.emit("error", fileUploadError, ctx);
    }
  }
}

module.exports = new GoodsController();
